/*
 * @Author: StarAire 1573905390@qq.com
 * @Date: 2023-09-16 13:50:19
 * @LastEditors: StarAire 1573905390@qq.com
 * @LastEditTime: 2023-09-17 02:12:47
 * @FilePath: /ANSI_VT/src/timer.c
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */


#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/time.h>
#include <unistd.h>
#include "global.h"


struct sigaction sa;
struct itimerval timer;

static void IntHandler(int s)
{
    GlobalEnd();
    printf("ctrl+c\n");
    fflush(stdout);
    exit(0);
}


static void AlrmHandler(int s)
{
    
    GameIng();
    
}


void TimerPause()
{
    // 暂停定时器
    timer.it_value.tv_sec = 0;
    timer.it_value.tv_usec = 0;
    if (setitimer(ITIMER_REAL, &timer, NULL) == -1) {
        perror("Error pausing timer");
        exit(-1);
    }
}

void TimerRecover(int sec,int usec)
{
    // 恢复定时器
    timer.it_value.tv_sec = 0;
    timer.it_value.tv_usec = 1000;
    timer.it_interval.tv_sec = sec;  // 定时周期，单位：秒
    timer.it_interval.tv_usec = usec; // 定时周期，单位：微秒
    if (setitimer(ITIMER_REAL, &timer, NULL) == -1) {
        perror("Error resuming timer");
        exit(-1);
    }
}

void TimerInit(void)
{
    // 创建定时器处理函数
    sa.sa_handler = AlrmHandler;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = 0;
    sigaction(SIGALRM, &sa, NULL);

    // 设置定时器参数
    timer.it_value.tv_sec = 0;  // 初始延迟时间，单位：秒
    timer.it_value.tv_usec = 1000; // 初始延迟时间，单位：微秒
    timer.it_interval.tv_sec = 0;  // 定时周期，单位：秒
    timer.it_interval.tv_usec = 100000; // 定时周期，单位：微秒
    // 设置定时器
    if (setitimer(ITIMER_REAL, &timer, NULL) == -1) {
        perror("Error setting timer");
        exit(-1);
    }
    
    signal(SIGINT,IntHandler); // ctrl+c信号

    
}



